#include <iostream>
#include <unordered_map>
#include <string>

// 类 TypeRegistry 用于注册和查询类型信息
class TypeRegistry {
private:
    // 使用 std::unordered_map 来存储类型名称与其对应的唯一标识符
    std::unordered_map<std::string, int> typeMap;

public:
    // 注册类型：将类型名称与一个唯一标识符相关联
    void registerType(const std::string& typeName, int typeId) {
        typeMap[typeName] = typeId;
    }

    // 获取类型：根据类型名称返回其唯一标识符
    int getType(const std::string& typeName) {
        // 使用 .at() 方法安全地访问元素，如果类型不存在将抛出 std::out_of_range 异常
        return typeMap.at(typeName);
    }
};

int main() {
    TypeRegistry registry;

    // 注册类型“MyClass”并分配一个标识符1
    registry.registerType("MyClass", 1);

    // 查询并打印“MyClass”的类型标识符
    try {
        std::cout << "Type ID of 'MyClass': " << registry.getType("MyClass") << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "Error: Type not found." << std::endl;
    }

    return 0;
}